package authhandler

import (
	"github.com/gin-gonic/gin"
	"strconv"
	"time"
	"yundian/internel/app/helper"
	"yundian/internel/app/logic"
	"yundian/internel/pkg/dingo"
	"yundian/internel/pkg/dingo/global"
	. "yundian/internel/pkg/dingo/result"
	"yundian/internel/pkg/utils"
)

// UserLogin 后台管理员登录 API
func HandleUserLogin(ctx *gin.Context) {
	// 请求参数处理
	data := &struct {
		UserName string `json:"username" binding:"required"` // 手机号码
		UserPwd  string `json:"password" binding:"required"` // 密码
	}{}
	dingo.ErrorIf(ctx.ShouldBindJSON(data)).Unwrap()

	t := time.Now().Format("20060102150405")

	// 登录业务逻辑处理
	token, err := logic.NewAuthLogic().UserLogin(data.UserName, data.UserPwd, ctx.ClientIP(), t)
	if err != nil {
		Response(ctx)(err.Error(), CodeError, nil)(OK)
		return
	}

	// 响应请求
	Response(ctx)("登录成功", CodeSuccess, &struct {
		Username   string `json:"username"`
		Token      string `json:"token"`
		TimeString string `json:"timeString"`
	}{Username: data.UserName, Token: token, TimeString: t})(OK)
}

// UserInfo 后台管理员信息
func HandleUserInfo(ctx *gin.Context) {
	userId, err := helper.GetUserIdFromCtx(ctx)
	if err != nil {
		//dingo.ErrorIf(err).Unwrap()
		Response(ctx)("登录失败", CodeError, nil)(ServerError)
		return
	}

	// 获取用户信息业务逻辑处理
	userInfo := logic.NewAuthLogic().GetUserInfo(userId)
	// 响应请求
	Response(ctx)("", CodeSuccess, userInfo)(OK)
}

// UserNav 后台管理员导航
func HandleUserNav(ctx *gin.Context) {
	userId, err := helper.GetUserIdFromCtx(ctx)
	dingo.ErrorIf(err, userId).Unwrap()
	// 获取用户导航业务逻辑处理
	userNavList := logic.NewAuthLogic().GetUserNavList(userId)
	// 响应请求
	Response(ctx)("", CodeSuccess, userNavList)(OK)
}

// UserLogout 后台管理员退出
func HandleUserLogout(ctx *gin.Context) {
	userId, err := helper.GetUserIdFromCtx(ctx)
	if err != nil {
		dingo.ErrorIf(err).Unwrap()
	}
	key := utils.Join("YdLogin-Token", strconv.Itoa(userId))
	// 清除redis缓存中的token
	global.Rdb.Del(ctx, key)
	Response(ctx)("成功退出", CodeSuccess, true)(OK)
}
